package com.bdqn;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
import org.junit.jupiter.api.Test;


public class ShiroTester {
    @Test
    public void testShiro() {
        // 1、创建Realm（安全数据源）
        // 通过shiro.ini配置文件创建Realm
        IniRealm realm = new IniRealm("classpath:shiro.ini");
        // 2、配置SecurityManager
        DefaultSecurityManager securityManager = new DefaultSecurityManager();
        // 注入创建的Realm（安全数据源）
        securityManager.setRealm(realm);
        SecurityUtils.setSecurityManager(securityManager);
        // 3、操作Subject，进行认证
        Subject subject = SecurityUtils.getSubject();
        // 封装一个令牌
        UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");
        try {
            subject.login(token); // 登录，即认证
        } catch (AbstractMethodError e) {
            System.out.println("认证异常：");
            e.printStackTrace();
        }
        System.out.println("是否认证通过:"+subject.isAuthenticated());
        System.out.println("身份信息:"+subject.getPrincipal());
        System.out.println("是否认证通过:"+subject.isAuthenticated());
        System.out.println("是否为管理员角色:"+subject.hasRole("管理员"));
        System.out.println("是否能操作用户查询权限:"+subject.isPermitted("user:view"));
        subject.checkPermission("user:view");
    }
}
